package com.linqi.freebie.utils

import kotlinx.serialization.json.Json
import kotlinx.serialization.KSerializer


object JsonUtils {

    // 配置 Json，和 Ktor 一致
    val json = Json {
        prettyPrint = false      // 是否格式化输出
        isLenient = true         // 宽松模式，容忍不规范 JSON
        ignoreUnknownKeys = true // 忽略未知字段
        encodeDefaults = true    // 序列化时包含默认值
    }

    /**
     * 将对象转换为 JSON 字符串（自动推导序列化器）
     */
    inline fun <reified T> toJson(obj: T): String {
        return json.encodeToString(obj)
    }

    /**
     * 将对象转换为 JSON 字符串（显式指定序列化器）
     */
    fun <T> toJson(serializer: KSerializer<T>, obj: T): String {
        return json.encodeToString(serializer, obj)
    }

    /**
     * 从 JSON 字符串解析为对象（自动推导序列化器）
     */
    inline fun <reified T> fromJson(jsonStr: String): T {
        return json.decodeFromString(jsonStr)
    }

    /**
     * 从 JSON 字符串解析为对象（显式指定序列化器）
     */
    fun <T> fromJson(serializer: KSerializer<T>, jsonString: String): T {
        return json.decodeFromString(serializer, jsonString)
    }
}